서른 셋 이런 저런
이런 저런 서른 셋 서른 둘 스물 일곱 스물 여섯 스물 다섯 스물 넷 방명록

Bomb lab 쉽게 풀기 위한 몇가지 팁

- Hex-rays IDA 설치

https://www.hex-rays.com/products/ida/support/download_freeware.shtml

바이너리를 분석해 유용한 정보를 얻을 수 있다.

그래프 형태로 각 함수들간의 관계, 바이너리로 저장된 String 목록, 분기 경로 및 각 분기 명령의 주소값에 대한 정보를 확인 가능하다.

이외에도 여러가지 기능이 있지만 여기선 크게 쓸일이 없다.

Windows 버전에서도 Linux 프로그램을 분석 할 수 있다.

Freeware 버전이라 기능상의 제한이 있지만, 다양한 문제에 유용하게 사용 가능하다.


- Explosion 방지

위의 IDA Debugger에서는 분석 대상의 바이너리를 Patch하는 기능을 제공한다.

Explosion값 정보를 서버로 전송하는 구문를 Call 하지 않고,

Operand를 수정해 의미없는 구문을 (예를 들어 문자열 출력 구문) Call 하도록 변경가능하다.

이런 방식으로 Explosion을 마음껏 할 수 있는 환경을 만든 뒤에 본게임에 들어가면 된다.


- 문제 접근 방법

Debugging 진행은 IDA에서도 가능하지만, 200만원을 결제해야한다. 때문에 gdb에서 진행한다.

각 Phase에서 입력값의 형식과 범위, 입력값의 흐름에 대해서는 그래프 상에서 직관적으로 알 수 있다.

따라서, 주어진 형식과 범위내에서 입력값 아무렇게나 넣은 뒤

각 Bomb Explosion 함수를 콜하는 명령에 break를 걸어 둔다.

Bomb Explosion을 불러오는 조건사항만 모두 회피한다는것은 즉 Phase를 클리어하는 것과 동일하다.

IDA에서 제공되는 그래프로 Explosion으로 향하는 분기와 주소값을 확인한 후 gdb상에서 break 건다.

break 걸리는 지점마다 info reg로 레지스터 값을 확인한 후 휴리스틱으로 때려 맞추면 된다.

어짜피 Explosion은 막혀있으므로, 입력 범위 내에서 test값을 여러개 넣어 돌려보며 레지스터 값을 확인해보자.

정확한 규칙을 발견 하지 못하더라도, 레지스터 값의 변화만 예상 가능하다면 쉽게 정답을 유추 가능하다.

귀찮음을 감수 할 수 있으면, 그래프만 보고 규칙을 찾는것도 가능할것 같다. 이 쪽이 학습에는 더욱 도움이 될 것이다.